#include <iostream>
using namespace std;

//继承方式

//公共继承
class Base1
{
public:
    int a;

protected:
    int b;

private:
    int c;
};

class Son1:public Base1
{
public:
    void func()
    {
        a = 10;//父类中，公共权限成员 到子类中依然是公共权限

        b = 20;//父类中，保护权限成员 到子类中依然是保护权限

        //error:c = 20;   父类中私有成员，子类无法访问
    }
};
void test1()
{
    Son1 s1;
    s1.a = 100;
    //error: s1.b = 99;     保护权限内容，类外访问不到
}


//保护继承
class Base2
{
public:
    int a;

protected:
    int b;

private:
    int c;
};
class Son2:protected Base2
{
public:
    void func()
    {
        a = 10;     //父类中公共成员，到子类中变为了保护权限
        b = 99;     //父类中保护成员，到子类中变为了保护权限
        //error:c = 80;   父类中私有成员，子类访问不到
    }
};
void test2()
{
    Son2 s2;
    //error:s2.a = 100;   保护成员，类外无法访问
    //error:s2.b = 100;   保护成员，类外无法访问
}


//私有继承
class Base3
{
public:
    int a;

protected:
    int b;

private:
    int c;
};
class Son3:private Base3
{
public:
    void func()
    {
        a = 100;    //父类中公共成员，在子类中变成私有成员
        b = 99;     //父类中保护成员，在子类中变成私有成员
        //error:c = 90;     父类中私有成员，子类访问不到
    }
};
class GrandSon3:public Son3
{
public:
    void func()
    {
        //error:a = 100;    父类中私有成员，子类无法访问
    }
};
void test3()
{
    Son3 s;
    //error:s.a = 100;  //私有成员，无法访问
}


int main()
{

    return 0;
}